import java.util.*;

public class day230403 {
    // 跳石板
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] array = new int[m+1]; // m+1 让下标与石板编号对应, 存放到当前石板用的最少步数

        // 初始化数组为Integer.MAX_VALUE
        Arrays.fill(array, Integer.MAX_VALUE);

        // 最开始所在的石板, 将步数置为0
        array[n] = 0;

        // 从初始位置, 开始跳石板
        for (int i = n; i < m; i++) {
            if (array[i] == Integer.MAX_VALUE) {
                // 说明没有一种情况到达这个石板
                continue;
            }

            // 找出当前石板编号的约数, 可以跳的位置
            List<Integer> list = div(i);

            // 遍历这些约数
            for (int j : list) {
                if (i + j <= m) {
                    // 当前石板可以跳到的位置, 更新这些位置
                    array[i + j] = Math.min(array[i + j], array[i] + 1);
                }
            }
            if (array[m] != Integer.MAX_VALUE) {
                // 提前结束, m 位置第一次到达, 就是最小步数
                // 但是加了这个判断效率更低了
                break;
            }
        }

        if (array[m] == Integer.MAX_VALUE) {
            System.out.println(-1);
        } else {
            System.out.println(array[m]);
        }
    }

    public static List<Integer> div(int n) {
        List<Integer> list = new ArrayList<>();
        for (int i = 2; i <= Math.sqrt(n); i++) {
            // 降低循环次数, i <= Math.sqrt(n)
            if (n % i == 0) {
                list.add(i);
                if (n / i != i) {
                    // 将 > Math.sqrt(n) 的约数 找出来
                    list.add(n / i);
                }
            }
        }
        return list;
    }


    // 参数解析
    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        int len = str.length();
        ArrayList<String> list = new ArrayList<>();
        boolean flag = true; // 用来判断空格是否在引号中
        for (int i = 0; i < len; i++) {
            StringBuilder sb = new StringBuilder();

            // 遍历一个参数
            while (i < len) {
                char ch = str.charAt(i);
                if (ch == ' ' && flag) {
                    // 空格, 并且不在引号中
                    break;
                }
                if (ch == '"') {
                    // 遇到引号改变flag
                    flag = !flag;
                } else {
                    sb.append(ch);
                }
                i++;
            }
            list.add(sb.toString());
        }
        // 输出个数, 和参数
        System.out.println(list.size());
        for (String s : list) {
            System.out.println(s);
        }
    }
}
